package com.buddy.learn.algorithm.simple;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Buddy
 * @date 2021/5/25
 */
public class _复原IP地址2 {
    public static void main(String[] args) {
        String s = "25525511135";
//        String s = "0000";
//        String s = "010010";
        System.out.println(JSON.toJSONString(restoreIpAddress(s)));
    }

    private static List<String> restoreIpAddress(String s) {
        List<String> result = new ArrayList<>();
        // 第一段IP范围
        for (int a = 1; a < 4; a++) {
            // 第二段IP范围
            for (int b = 1; b < 4; b++) {
                // 第三段IP范围
                for (int c = 1; c < 4; c++) {
                    // 第四段IP范围
                    for (int d = 1; d < 4; d++) {
                        // 如果几段长度等于s的长度
                        if (a + b + c + d == s.length()) {
                            // 分别解析对应的段
                            // 注意：这里00会被解析为0，因此后面需要对拼接后的str长度做判断
                            int n1 = Integer.parseInt(s.substring(0, a));
                            int n2 = Integer.parseInt(s.substring(a, a + b));
                            int n3 = Integer.parseInt(s.substring(a + b, a + b + c));
                            int n4 = Integer.parseInt(s.substring(a + b + c));
                            // 判断每段是否有效
                            if (n1 <= 255 && n2 <= 255 && n3 <= 255 && n4 <= 255) {
                                String str = n1 + "." +
                                        n2 + "." +
                                        n3 + "." +
                                        n4;
                                if (str.length() == s.length() + 3) {
                                    result.add(str);
                                }
                            }

                        }
                    }
                }
            }
        }
        return result;
    }
}
